using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
namespace Entidades
{
    public class Partido
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Partido), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Partido), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Partido), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Partido), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Partido), ";
        private Int32 _Id;
        private string _partido;

        private Int32 _IdProvincia;
        #region "Propiedades"
        public Int32 Id
        {
            get { return _Id; }
            set { _Id = value; }
        }
        public string partido
        {
            get { return _partido; }
            set { _partido = value; }
        }
        public Int32 IdProvincia
        {
            get { return _IdProvincia; }
            set { _IdProvincia = value; }
        }
        #endregion
        #region "Lazys"
        private List<Localidad> _Localidades;
        public List<Localidad> Localidades
        {
            get
            {
                if (_Localidades == null)
                {
                    _Localidades = Localidad.getAllByIdPartido(_Id);
                }
                return _Localidades;
            }
        }
        private Provincia _Provincia;
        public Provincia Provincia
        {
            get
            {
                if (_Provincia == null)
                {
                    _Provincia = new Provincia(_IdProvincia);
                }
                return _Provincia;
            }
        }
        #endregion
        public Partido()
        {
        }
        public Partido(Int32 Id)
        {
            Partido partido = traerUno(Id);
            this._Id = partido.Id;
            this._partido = partido.partido;
            this._IdProvincia = partido.IdProvincia;
        }
        #region "Metodos Publicos"
        public void Alta()
        {
            try
            {
                validaAlta();
                DALPartido.Alta(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public void Baja()
        {
            try
            {
                validaBaja();
                DALPartido.Baja(_Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public void Modificar()
        {
            try
            {
                validaModificacion();
                DALPartido.Modificar(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        #region "Metodos Estaticos"
        private Partido traerUno(int Id)
        {
            try
            {
                return DALPartido.traerUno(Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerUno + ex.Message);
            }
        }
        public static List<Partido> TraerTodos()
        {
            try
            {
                return DALPartido.TraerTodos();
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }
        #region "Lazys"
        public static List<Partido> getAllByIdProvincia(Int32 IdProvincia)
        {
            try
            {
                return DALPartido.getAllByIdProvincia(IdProvincia);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Partido)" + ex.Message);
            }
        }
        #endregion
        #endregion
        #endregion
        #region "Metodos Privados"
        private void validaAlta()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
            throw new NotImplementedException();
        }
        private void validaBaja()
        {
            //lanza excepcion si no valida
            throw new NotImplementedException();
        }
        private void validaModificacion()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
            throw new NotImplementedException();
        }
        #endregion
    }
}